//package com.cf.download.until;
//
//
//import java.io.IOException;
//import java.sql.Connection;
//import java.sql.PreparedStatement;
//import java.sql.ResultSet;
//import java.sql.SQLException;
//import java.sql.Statement;
//import java.util.List;
//import java.util.Properties;
//
//import org.apache.commons.dbcp2.BasicDataSource;
//
///**
// * @Author: YangF
// * @Date: 2020-12-29 19:28
// * @description:
// */
//public class DBUtils {
//    // 连接数据库基本属性
//    private static String driver;
//    private static String url;
//    private static String username;
//    private static String password;
//    private static BasicDataSource bds;// 数据源
//    // 连接池属性
//    private static int initSize;
//    private static int maxSize;
//    private static int maxIdle;
//    private static long maxWait;
//
//    static{
//        init();
//    }
//    public static void init(){
//        try {
//            // 创建数据源对象
//            bds = new BasicDataSource();
//            // 加载属性文件,获取属性信息
//            Properties props = new Properties();
//            props.load(DBUtils.class.getResourceAsStream("jdbc.properties"));
//            driver = props.getProperty("driver");
//            url = props.getProperty("url");
//            username = props.getProperty("user");
//            password = props.getProperty("password");
//
//            initSize = Integer.parseInt(props.getProperty("initSize"));
//            maxSize = Integer.parseInt(props.getProperty("maxSize"));
//            maxIdle = Integer.parseInt(props.getProperty("maxIdle"));
//            maxWait = Long.parseLong(props.getProperty("maxWait"));
//
//            // 设置驱动类路径
//            bds.setDriverClassName(driver);
//            bds.setUrl(url);
//            bds.setUsername(username);
//            bds.setPassword(password);
//
//            bds.setInitialSize(initSize);	// 初始连接数
//            bds.setMaxTotal(maxSize);	// 最大连接数
//            bds.setMaxIdle(maxIdle);		// 最大闲置连接数
//            bds.setMaxWaitMillis(maxWait);// 等待获取连接的最大时间(ms)
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//    }
//    // 获取连接
//    public static Connection getConn(){
//        if(bds == null || bds.isClosed()){
//            init();
//        }
//        try {
//            return bds.getConnection();
//        } catch (SQLException e) {
//            e.printStackTrace();
//        }
//        return null;
//    }
//
//    //封装资源回收的方法
//    public static void close(ResultSet rs,Statement stat,Connection conn){
//
//        try {
//            if(rs != null) rs.close();
//            if(stat != null) stat.close();
//            if(conn != null)conn.close();
//        } catch (SQLException e) {
//            e.printStackTrace();
//        }
//    }
//    /**
//     * 通用增删改
//     * @param conn
//     * @param sql
//     * @param objs
//     * @return
//     */
//    public static boolean execUpdate(Connection conn, String sql, Object ...objs){
//        try {
//            PreparedStatement ps = conn.prepareStatement(sql);
//            for (int i = 0; i < objs.length; i++) {
//                ps.setObject(i+1, objs[i]);
//            }
//            int i = ps.executeUpdate();
//            return i > 0 ? true : false;
//        } catch (SQLException e) {
//            e.printStackTrace();
//        }
//        return false;
//    }
//    // 封装查询操作
//    public static <T> List<T> execQuery(String sql,CallBack<T> call, Object ...params){
//        Connection conn = DBUtils.getConn();
//        PreparedStatement ps = null;
//        try {
//            ps = conn.prepareStatement(sql);
//            for (int i = 0; i < params.length; i++) {
//                ps.setObject(i+1, params[i]);
//            }
//            ResultSet rs = ps.executeQuery();
//            return call.getDatas(rs);
//        } catch (SQLException e) {
//            e.printStackTrace();
//        }
//        return null;
//    }
//
//    // 查询单个对象
//    public static <T> T execQueryOne(String sql,CallBack<T> call, Object ...params){
//        Connection conn = DBUtils.getConn();
//        PreparedStatement ps = null;
//        try {
//            ps = conn.prepareStatement(sql);
//            for (int i = 0; i < params.length; i++) {
//                ps.setObject(i+1, params[i]);
//            }
//            ResultSet rs = ps.executeQuery();
//            return call.getData(rs);
//        } catch (SQLException e) {
//            e.printStackTrace();
//        }
//        return null;
//    }
//    // JDK1.8+新特性
//    public interface CallBack<T>{
//        // public List<T> getDatas(ResultSet rs);
//        default List<T> getDatas(ResultSet rs) {
//            return null;
//        }
//        default T getData(ResultSet rs) {
//            return null;
//        }
//    }
//
//}
